/**
 * 为什么使用Promise
 *
 * 多重链式调用，可以避免层层嵌套回调
 */

// 异步回调
function request(url, param, successFun, errorFun) {
    $.ajax({
        type: 'GET',
        url: url,
        param: param,
        async: true,    //默认为true,即异步请求；false为同步请求
        success: successFun,
        error: errorFun
    });
}


// 厄运回调金字塔
request('test1.html', '', function(data1) {
    console.log('第一次请求成功, 这是返回的数据:', data1);

    request('test2.html', data1, function (data2) {

        console.log('第二次请求成功, 这是返回的数据:', data2);
        request('test3.html', data2, function (data3) {
            console.log('第三次请求成功, 这是返回的数据:', data3);
            //request... 继续请求
        }, function(error3) {
            console.log('第三次请求失败, 这是失败信息:', error3);
        });

    }, function(error2) {
        console.log('第二次请求失败, 这是失败信息:', error2);
    });

}, function(error1) {
    console.log('第一次请求失败, 这是失败信息:', error1);
});


// Promise 链式回调
function sendRequest(url, param) {
    return new Promise(function (resolve, reject) {
        request(url, param, resolve, reject);
    });
}

sendRequest('test1.html', '').then(function(data1) {
    console.log('第一次请求成功, 这是返回的数据:', data1);
    return sendRequest('test2.html', data1);
}).then(function(data2) {
    console.log('第二次请求成功, 这是返回的数据:', data2);
    return sendRequest('test3.html', data2);
}).then(function(data3) {
    console.log('第三次请求成功, 这是返回的数据:', data3);
}).catch(function(error) {
    //用catch捕捉前面的错误
    console.log('sorry, 请求失败了, 这是失败信息:', error);
});